package com.kongge.algorithm.demo;

/**
 * 输入数字n,按顺序打印出从1到最大的n位十进制数。
 * 比如输入3，则打印出1、 2、 3、 一直到最大的3位数即999 。
 * 注意点：越界
 * @author gaoshiqi
 *
 */
public class PrintToMaxOfNDigits implements IAlgorithm{

	public void execute() {
		int n = 3;
		printToMaxOfNDigits(n);
	}
	
	public void printToMaxOfNDigits(int n) {
		if (n <= 0) {
			return;
		}
		// 创建时，数组长度+1，第0位不为0表示停止条件
		int[] numberArr = new int[n + 1];
		for (int i = 0; i < numberArr.length; i++) {
			numberArr[i] = 0;
		}
		numberArr[n] = 1;
		// 判断第0个位置是否是0，如果不是说明进位，此时应该停止循环+1
		while (numberArr[0] == 0) {
			printNumberArr(numberArr);
			System.out.print("\n");
			// 加1
			int addFlag = 1;
			for (int i = n; i >= 0; i--) {
				int number = numberArr[i] + addFlag;
				if (number >= 10) {
					addFlag = number / 10;
					number %= 10;
				} else {
					addFlag = 0;
				}
				numberArr[i] = number;
				if (addFlag == 0) {
					break;
				}
			}
			
			
		}
		
	}
	
	/**
	 * 打印数组，从第一个不为0的位置开始打印
	 * @param numberArr
	 */
	private void printNumberArr(int[] numberArr) {
		if (numberArr == null || numberArr.length == 0) {
			return;
		}
		boolean isStart = false;
		for (int i = 0; i < numberArr.length; i++) {
			if (!isStart) {
				if (numberArr[i] == 0) {
					continue;
				}
				isStart = true;
			}
			System.out.print("" + numberArr[i]);
		}
	}
	
}
